VC文本编辑(CEdit)框垂直居中

在多行模式下的CEdit类提供void CEdit::SetRectNP( LPCRECT lpRect)函数,此函数用来调整文本编辑的区域,用这个函数可以设置上下左右Margins,而void SetMargins( UINT nLeft, UINT nRight)函数只能设置左右Margins。

CRect rc = CRect(0,0,0,0);
edit.GetClientRect(&rc);
rc.DeflateRect(10,10,10,10);
edit.SetRectNP(&rc);

这段代码设置上下左右Margin都是10。

水平有限,到目前还没找到单行模式下让文本框的文本垂直居中的办法,因此想到了利用多行文本框来模拟单行然后设置垂直居中的办法。

CRect rc = CRect(0,0,0,0);
edit.GetClientRect(&rc);
CDC* pDC = edit1.GetDC();
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
int nFontHeight = tm.tmHeight + tm.tmExternalLeading;
int nMargin = (rc.Height() - nFontHeight) / 2;
 
rc.DeflateRect(0,nMargin);
edit.SetRectNP(&rc);

将文本框的属性设置为ES_MULTILINE | ES_AUTOHSCROLL且不能ES_AUTOVSCROLL | ES_WANTRETURN

本页共24段,754个字符,1074 Byte(字节)